/*
 * Fichier: Source1.java
 * Crée le: 28 novembre 2008.
 * Modifié: 7 juillet 2007.
 * Auteurs: Sébastien ESTIENNE.
 * SiteWeb: http://www.prog-info.org/
 * Email  : nom.prenom@domaine.com
 */

package highlighter;

import java.util.ArrayList;
import java.util.List;


/**
 * <p>Classe Source1 pour tester le JavaHighlighter.</p>
 * @author Sébastien ESTIENNE.
 */
public class Source1 extends Object
{
   /** Attribut de type booléen. */
   private boolean mb;
   
   /** Attribut de type entier. */
   private int mi;
   
   /** Attribut de type long. */
   private long ml;
   
   /** Attribut de type float. */
   private float mf;
   
   /** Attribut de type double. */
   private double md;
   
   /** Attribut de type byte. */
   private transient byte my;
   
   /** Attribut de type short. */
   private short ms;
   
   /** Attribut de type char. */
   private char mc;
   
   /** Attribut de type enum. */
   private enum Sexe
   {
      /** Masculin. */
      MASCULIN, 
      /** Féminin. */
      FEMININ
   }
   
   /** Attrbut sexe. */
   private volatile Sexe mx;
   
   /** Attribut de type liste. */
   private List<String> myList;
   
   /** Variable de test. */
   private Object var123ForTest;
   
   /** Constante. */
   private static final int NB = 10;
   
   /**
    * <p>Constructeur.</p>
    */
   public Source1()
   {
      super();
      init();
      method1();
      method2();
      method3();
      method4();
      method5();
   }
   
   /**
    * <p>Initialisation des variables.</p>
    */
   protected void init()
   {
      this.mb = true;
      this.mi = 0;
      this.ml = 0L;
      this.mf = 0.0F;
      this.md = 0.0E+0;
      this.mf = 0.0f;
      this.md = 0.0e+0;
      this.my = 0;
      this.ms = 0;
      this.mc = '\0';
      this.mx = Sexe.FEMININ;
      this.myList = new ArrayList<String>();
   }
   
   /**
    * <p>Méthode pour les booléens et le test if/else.</p>
    */
   private void method1()
   {
      assert (this.mi == 0);
      
      if(this.mx == Sexe.MASCULIN)
      {
         this.mb = true;
      }
      else
      {
         this.mb = false;
      }
   }
   
   /**
    * <p>Méthode pour le switch.</p>
    */
   private void method2()
   {
      switch(this.mc)
      {
      case '\0':
         break;
      case '\'':
         break;
      case '<':
         break;
      default:
         this.ml = this.ml * 3 / 2 + 1;
         break;
      }
   }
   
   /**
    * <p>Méthode pour le while.</p>
    */
   private void method3()
   {
      this.mi = 1;
      do
      {
         if(this.mi > 10 && (this.mi < 0 || this.mi == 1024))
         {
            break;
         }
         this.mi += this.mi;
      }
      while(this.mi < NB);
   }
   
   /**
    * <p>Méthode pour le for.</p>
    */
   private synchronized void method4()
   {
      for(int j = 0; j < NB; j++)
      {
         if(j % 2 == 0)
         {
            this.myList.add(String.valueOf(j));
         }
         else
         {
            continue;
         }
      }
   }
   
   /**
    * <p>Méthode pour les exceptions.</p>
    * @throws NumberFormatException Si une division par zéro se produit.
    */
   private void method5() throws NumberFormatException
   {
      try
      {
         this.md = this.mi / this.mf;
      }
      catch(NumberFormatException e)
      {
         throw new NumberFormatException("Division par zéro.");
      }
      finally
      {
         if(this.var123ForTest instanceof List)
         {
            this.var123ForTest = null;
         }
      }
   }
   
   /**
    * <p>Méthode native.</p>
    * @param msg Le message à afficher.
    */
   private native void showMessage(String msg);
   
   /**
    * <p>Redéfinition de la méthode toString().</p>
    * @return Une représentation de l'objet.
    */
   @Override
   public String toString()
   {
      return "Ceci est une implémentation de la méthode \"toString()\"";
   }
   
   /**
    * Interface pour les mots clés relatif aux interfaces.
    */
   @SuppressWarnings(value = "unused")
   private interface MyInterface
   {
      /** Méthode abstraite. */
      public abstract void methodeAbstraite();
   }
   
   /**
    * <p>Débute l'exécution de l'application.</p>
    * @param args Les paramètres de la ligne de commande.
    */
   public static void main(String[] args)
   {
      new Source1();
   }
}
